package main

import (
	"errors"
	"fmt"
)

// "gitee.com/mad-wud/lin"
func C创建单组件环境(组件中文名,索引组件名 string) error {
	if err := 添加goworke基础( 组件中文名,索引组件名); err != nil {
		fmt.Println(err)
		return err
	}

	if err := 创建vue组件( 组件中文名,索引组件名); err != nil {
		fmt.Println(err)
		return err
	}

	
	if err := 改vue组件index( 组件中文名,索引组件名); err != nil {
		fmt.Println(err)
		return err
	}
	return nil
}

func 添加goworke基础(组件中文名,索引组件名 string) error {


	基础数据 := `package library

	import (
		"gitee.com/mad-wud/lin"
	)
	
	var {1}_基础 = "<template> 基础待设计 </template><script setup></script><style scoped></style>"

	func {2}(属性表, 事件表 lin.J键值表) (vue string) {
		基础vue := {1}_基础
		属性 := 属性生成(属性表)
		事件 := 事件生成(事件表)
		属性 = 属性 + 事件
		样式 := ""
		js := ""
		if 属性表.QW取文本("icon") != "" {
			js = "import { " + 属性表.QW取文本("icon") + " }  from '@element-plus/icons-vue' //更多图标官方文档 改变引用和:icon 对应值即可 \r\n" + js
		}
	
		基础vue = 全_文本.C创建文本(基础vue, 属性, 样式, js)
		return 基础vue
	
	}
	`
	基础数据 = 全_文本.C创建文本(基础数据, 组件中文名,索引组件名)

	go文件路径 := 全_文本.C创建文本("./library/{1}.go", 组件中文名)
	存在 := 全_文件.P判断文件_是否存在(go文件路径)
	if 存在 {
		错误 := errors.New(组件中文名 + ".go 文件已经存在")
		return 错误
	}

	return 全_文件.X写到_文件(go文件路径, []byte(基础数据))
}


func 创建vue组件( 组件中文名,索引组件名 string) error {

	文件路径 := 全_文本.C创建文本("./桌面端开发环境/src/components/library/{1}.vue",  组件中文名)
	存在 := 全_文件.P判断文件_是否存在(文件路径)
	if 存在 {
		错误 := errors.New(文件路径 + " 文件已经存在")
		return 错误
	}

	基础数据 := `<template>
    <div style="display: flex;width: 100%;height: 100vh;">
        <!-- 右边 -->
		<div style="width: 300px;color: rgb(12, 21, 29); min-height: 100%;">
            <!-- 组件名 -->
            <div style="display:flex ;">
                <h1
                    style="margin-top: 10px;margin-left: 30px;width: 130px;text-align: center;background-color:rgb(240, 20, 31);">
                    {{ 组件名 }}</h1>
                <el-button size="small" style="margin-top: 20px;margin-left: 30px;" @click="重置组件">重置组件</el-button>
            </div>
            <div style="height: 90%;">
                <!-- 属性 -->
                <el-scrollbar height="100%">
                </el-scrollbar>

            </div>
        </div>
        <!-- 左边 -->
        <div style="width: calc(100vw - 300px);;background-color: rgb(160, 178, 194); text-align: center;height: 99%;">
		<el-input v-model="代码" :autosize="{ minRows: 5, maxRows: 50 }" type="textarea" placeholder="代码展示" style="width: 98%;margin-top: 50px;"/>
        </div>
    </div>
</template>
<script setup>
import { Delete, Edit, Search, Share, Upload } from '@element-plus/icons-vue'
import { ElMessage, formItemContextKey, ElMessageBox } from 'element-plus'
import { ref, reactive } from 'vue'
import{getCurrentInstance} from 'vue'
const { proxy } = getCurrentInstance();
const 提交方法 = proxy.API.提交方法 //提交方法('方法名',.....其他参数)
const ws广播 = proxy.API.监听ws广播 //监听ws广播('方法名',function(参数)) //广播 就是所有用户都会收到
const ws标识 = proxy.API.监听ws标识 //监听ws标识('方法名','标识',function(参数)) // 标识 相同标识的都会收到  比如多用户账号指定某账号  和 账号多处登录
const 跳转路由 =proxy.router

const 组件名 = ref('{1}')
const 属性 = ref({
})
const 事件 = ref({
})

const 代码 = ref('')
const 提交改变=async()=>{
    let 结果=await 提交方法("组件修改",组件名.value,属性.value,事件.value)
    代码.value=结果
}

const 重置组件=()=>{
    属性.value={}
	事件.value={}
    提交改变()
}

const 样式1 = ref('display: flex;margin-top: 10px;margin-left: 5px;font-size: 14px;border: 1px solid #ccc;width:95%')
const 样式2 = ref('color:rgb(190, 161, 161);font-size: 10px;margin-left: 10px;')

</script>
<style  scoped></style>`
	基础数据 = 全_文本.C创建文本(基础数据, 组件中文名)
	return 全_文件.X写到_文件(文件路径, []byte(基础数据))

}

func 改vue组件index( 组件中文名,索引组件名 string) error {
	文件路径 := "./桌面端开发环境/src/components/main/index.vue"
	存在 := 全_文件.P判断文件_是否存在(文件路径)
	if !存在 {
		错误 := errors.New(文件路径 + " 文件不存在")
		return 错误
	}
	数据, err := 全_文件.D读入_文件(文件路径)
	if err != nil {
		return err
	}

	基础数据 := string(数据)
	替换1 := 全_文本.C创建文本(`<{2} v-show="显示条件=='{1}'"/>`, 组件中文名,索引组件名) + "\r\n                <!-- {1} -->"
	替换2 := 全_文本.C创建文本(`import {1} from '../library/{2}.vue'`, 索引组件名, 组件中文名) + "\r\n//{2}"
	替换3 := 全_文本.C创建文本(`{ title: "{1}", index: "{2}" },`, 索引组件名, 组件中文名) + "\r\n    //{3}"
	基础数据 = 全_文本.T替换文本(基础数据, "<!-- {1} -->", 替换1, 1)
	基础数据 = 全_文本.T替换文本(基础数据, "//{2}", 替换2, 1)
	基础数据 = 全_文本.T替换文本(基础数据, "//{3}", 替换3, 1)
	return 全_文件.X写到_文件(文件路径, []byte(基础数据))

}

